/**
 * 不仅可以同时传入多个泛型参数，还可以让这几个泛型参数之间也存在联系。
 * 
 * 先看一个简单的场景，条件类型下的多泛型参数：
 * 这个例子表明，多泛型参数 其实就像 接受更多参数的函数，
 * 其内部的运行逻辑（类型操作）会更加抽象，
 * 表现在 参数（泛型参数）需要进行的 逻辑运算（类型操作）会更加复杂
*/
type Conditional<Type, Condition, TruthyResult, FalsyResult> =
  Type extends Condition ? TruthyResult : FalsyResult;
//  "passed!"
type Result1 = Conditional<'hanxuming', string, 'passed!', 'rejected!'>;
// "rejected!"
type Result2 = Conditional<'hanxuming', boolean, 'passed!', 'rejected!'>;

/**
 * 多个泛型参数之间的关联，其实指的即是：在后续泛型参数中，使用前面的泛型参数作为约束或默认值：
 * 多泛型关联在一些 复杂的工具类型 中非常常见
*/
type ProcessInput<
  Input,
  SecondInput extends Input = Input,
  ThirdInput extends Input = SecondInput
> = number;

//export {}：解决“无法重新声明块范围变量”错误提示问题
export { }